Встроенные функции и метапрограммирование
Встроенные функции в Groovy
Функции для работы с коллекциями
| Функция | Значение | Пример |
|---|---|---|
collect() | Преобразует каждый элемент коллекции | [1, 2, 3].collect { it * 2 } |
findAll() | Фильтрует элементы по условию | [1, 2, 3, 4].findAll { it > 2 } |
each() | Выполняет действие для каждого элемента | [1, 2, 3].each { println it } |
inject() | Накапливает результат через аккумулятор | [1, 2, 3].inject(0) { sum, num -> sum + num } |
any() | Проверяет, соответствует ли хотя бы один элемент условию | [1, 2, 3].any { it > 2 } |
every() | Проверяет, соответствуют ли все элементы условию | [2, 4, 6].every { it % 2 == 0 } |
groupBy() | Группирует элементы по ключу | [1, 2, 3, 4].groupBy { it % 2 } |
sort() | Сортирует коллекцию | [3, 1, 4, 2].sort() |
reverse() | Разворачивает коллекцию | [1, 2, 3].reverse() |
unique() | Удаляет дубликаты | [1, 2, 2, 3].unique() |
flatten() | Преобразует вложенные коллекции в плоскую | [[1, 2], [3, 4]].flatten() |
sum() | Вычисляет сумму элементов | [1, 2, 3].sum() |
min() | Находит минимальный элемент | [3, 1, 4, 2].min() |
max() | Находит максимальный элемент | [3, 1, 4, 2].max() |
count() | Подсчитывает элементы по условию | [1, 2, 3, 4].count { it > 2 } |
drop() | Удаляет указанное количество элементов с начала | [1, 2, 3, 4].drop(2) |
take() | Берет указанное количество элементов с начала | [1, 2, 3, 4].take(2) |
chunk() | Разбивает коллекцию на части | [1, 2, 3, 4, 5].chunk(2) |
Функции для работы со строками
| Функция | Значение | Пример |
|---|---|---|
trim() | Удаляет пробелы по краям строки | " текст ".trim() |
toUpperCase() | Преобразует строку в верхний регистр | "привет".toUpperCase() |
toLowerCase() | Преобразует строку в нижний регистр | "ПРИВЕТ".toLowerCase() |
replaceAll() | Заменяет все вхождения подстроки | "привет мир".replaceAll("мир", "Groovy") |
split() | Разделяет строку по разделителю | "один,два,три".split(",") |
tokenize() | Разбивает строку на токены | "один два три".tokenize() |
center() | Центрирует строку в заданной ширине | "текст".center(20) |
padLeft() | Добавляет символы слева | "5".padLeft(3, "0") |
padRight() | Добавляет символы справа | "5".padRight(3, "0") |
reverse() | Разворачивает строку | "привет".reverse() |
capitalize() | Делает первую букву заглавной | "привет".capitalize() |
toInteger() | Преобразует строку в целое число | "123".toInteger() |
toDouble() | Преобразует строку в число с плавающей точкой | "123.45".toDouble() |
toBoolean() | Преобразует строку в булево значение | "true".toBoolean() |
encodeBase64() | Кодирует строку в Base64 | "текст".encodeBase64() |
decodeBase64() | Декодирует строку из Base64 | "dGVrdHM=".decodeBase64() |
stripMargin() | Удаляет отступы из многострочной строки | """ текст""".stripMargin() |
stripIndent() | Удаляет общий отступ из строк | """ текст""".stripIndent() |
Функции для работы с файлами
| Функция | Значение | Пример |
|---|---|---|
eachLine() | Читает файл построчно | new File("file.txt").eachLine { line -> println line } |
readLines() | Читает все строки файла в список | new File("file.txt").readLines() |
getText() | Читает содержимое файла как строку | new File("file.txt").getText() |
getText(String charset) | Читает файл с указанием кодировки | new File("file.txt").getText("UTF-8") |
write(String text) | Записывает текст в файл | new File("file.txt").write("текст") |
append(String text) | Добавляет текст в конец файла | new File("file.txt").append("дополнение") |
delete() | Удаляет файл | new File("file.txt").delete() |
renameTo(File dest) | Переименовывает файл | new File("old.txt").renameTo(new File("new.txt")) |
mkdir() | Создает директорию | new File("dir").mkdir() |
mkdirs() | Создает директорию со всеми родительскими | new File("dir/subdir").mkdirs() |
listFiles() | Возвращает список файлов в директории | new File("dir").listFiles() |
eachFile() | Выполняет действие для каждого файла | new File("dir").eachFile { file -> println file } |
eachFileRecurse() | Рекурсивно обходит все файлы | new File("dir").eachFileRecurse { file -> println file } |
exists() | Проверяет существование файла | new File("file.txt").exists() |
isDirectory() | Проверяет, является ли файл директорией | new File("dir").isDirectory() |
isFile() | Проверяет, является ли путь файлом | new File("file.txt").isFile() |
length() | Возвращает размер файла в байтах | new File("file.txt").length() |
lastModified() | Возвращает время последнего изменения | new File("file.txt").lastModified() |
Системные функции
| Функция | Значение | Пример |
|---|---|---|
println() | Выводит текст с переносом строки | println "Привет" |
print() | Выводит текст без переноса строки | print "Привет" |
printf() | Форматированный вывод | printf "Число: %d", 42 |
sleep(long millis) | Приостанавливает выполнение | sleep(1000) |
Система.currentTimeMillis() | Текущее время в миллисекундах | Система.currentTimeMillis() |
System.getenv(String name) | Получает переменную окружения | System.getenv("PATH") |
Система.getProperty(String name) | Получает системное свойство | Система.getProperty("user.home") |
Runtime.getRuntime().exec(String cmd) | Выполняет системную команду | Runtime.getRuntime().exec("ls") |
Thread.start() | Запускает новый поток | Thread.start { println "Поток" } |
Thread.join() | Ожидает завершения потока | thread.join() |
synchronized(Object lock) | Синхронизирует блок кода | synchronized(lock) { /* код */ } |
Функции для работы с датами
| Функция | Значение | Пример |
|---|---|---|
new Date() | Создает объект текущей даты | def now = new Date() |
parse(String pattern, String date) | Парсит строку в дату | Date.parse("yyyy-MM-dd", "2024-01-15") |
format(String pattern) | Форматирует дату в строку | new Date().format("yyyy-MM-dd") |
getYear() | Возвращает год | new Date().getYear() |
getMonth() | Возвращает месяц | new Date().getMonth() |
getDate() | Возвращает день месяца | new Date().getDate() |
getHours() | Возвращает часы | new Date().getHours() |
getMinutes() | Возвращает минуты | new Date().getMinutes() |
getSeconds() | Возвращает секунды | new Date().getSeconds() |
plus(int days) | Добавляет дни к дате | new Date() + 7 |
minus(int days) | Вычитает дни из даты | new Date() - 7 |
compareTo(Date other) | Сравнивает две даты | date1.compareTo(date2) |
before(Date other) | Проверяет, раньше ли дата | date1.before(date2) |
after(Date other) | Проверяет, позже ли дата | date1.after(date2) |
clearTime() | Обнуляет время в дате | new Date().clearTime() |
copyWith(Map changes) | Создает копию с изменениями | date.copyWith(year: 2025) |
Функции для работы с числами
| Функция | Значение | Пример |
|---|---|---|
abs() | Абсолютное значение | (-5).abs() |
round() | Округление до ближайшего целого | 3.7.round() |
ceil() | Округление вверх | 3.2.ceil() |
floor() | Округление вниз | 3.8.floor() |
intValue() | Преобразует в целое число | 3.14.intValue() |
longValue() | Преобразует в длинное целое | 3.14.longValue() |
floatValue() | Преобразует в число с плавающей точкой | 3.intValue().floatValue() |
doubleValue() | Преобразует в двойную точность | 3.intValue().doubleValue() |
toInteger() | Преобразует в Integer | "42".toInteger() |
toLong() | Преобразует в Long | "42".toLong() |
toFloat() | Преобразует в Float | "3.14".toFloat() |
toDouble() | Преобразует в Double | "3.14".toDouble() |
times(Closure closure) | Выполняет замыкание указанное количество раз | 3.times { println "Привет" } |
upto(Number to, Closure closure) | Выполняет от текущего числа до указанного | 1.upto(5) { println it } |
downto(Number to, Closure closure) | Выполняет от текущего числа вниз до указанного | 5.downto(1) { println it } |
step(Number to, Number step, Closure closure) | Выполняет с шагом | 1.step(10, 2) { println it } |
Функции для отладки
| Функция | Значение | Пример |
|---|---|---|
dump() | Выводит внутреннюю структуру объекта | obj.dump() |
inspect() | Возвращает строковое представление объекта | obj.inspect() |
toString() | Строковое представление объекта | obj.toString() |
getClass() | Возвращает класс объекта | obj.getClass() |
instanceOf(Class clazz) | Проверяет принадлежность к классу | obj.instanceOf(String) |
asType(Class clazz) | Преобразует объект к указанному типу | obj.asType(String) |
with(Object receiver) | Выполняет код в контексте объекта | obj.with { println name } |
tap(Closure closure) | Выполняет замыкание и возвращает объект | obj.tap { it.name = "test" } |
withTraits(List traits) | Применяет трейты к объекту | obj.withTraits([Trait1, Trait2]) |
Функции для работы с картами (Map)
| Функция | Значение | Пример |
|---|---|---|
get(Object key) | Получает значение по ключу | map.get("key") |
put(Object key, Object value) | Добавляет пару ключ-значение | map.put("key", "value") |
remove(Object key) | Удаляет элемент по ключу | map.remove("key") |
containsKey(Object key) | Проверяет наличие ключа | map.containsKey("key") |
containsValue(Object value) | Проверяет наличие значения | map.containsValue("value") |
keySet() | Возвращает множество ключей | map.keySet() |
values() | Возвращает коллекцию значений | map.values() |
entrySet() | Возвращает множество записей | map.entrySet() |
each(Closure closure) | Выполняет для каждой пары ключ-значение | map.each { k, v -> println "$k=$v" } |
collect(Closure closure) | Преобразует каждую запись | map.collect { k, v -> "$k=$v" } |
findAll(Closure closure) | Фильтрует записи по условию | map.findAll { k, v -> v > 10 } |
any(Closure closure) | Проверяет условие для хотя бы одной записи | map.any { k, v -> v > 10 } |
every(Closure closure) | Проверяет условие для всех записей | map.every { k, v -> v > 0 } |
groupBy(Closure closure) | Группирует записи по ключу | map.groupBy { k, v -> v % 2 } |
sort(Closure closure) | Сортирует записи | map.sort { a, b -> a.value <=> b.value } |
subMap(Collection keys) | Создает подкарту с указанными ключами | map.subMap(["key1", "key2"]) |
plus(Map other) | Объединяет две карты | map1 + map2 |
minus(Object key) | Удаляет ключ из карты | map - "key" |
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Groovy — это кейс эволюции технологии в условиях доминирующей платформы. Из неё можно извлечь несколько обобщаемых принципов. Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Набор советов, правил, принципов и обычаев в разработке на этом языке. Макросы на уровне языка (начиная с Groovy 2.5) — groovy.transform.Macro позволяет инжектить код, основываясь на анализе AST. Типизация, набор правил определения типа данных значений языка. Арифметические операторы в Groovy предназначены для выполнения математических операций над числами. К ним относятся — + — сложение. Применяется к числам, а также к строкам, где он выполняет… В языке Groovy циклы реализованы как через классические управляющие конструкции, унаследованные от Java и других императивных языков, так и через более выразительные, декларативные подходы,… В этом примере greet — это переменная, содержащая замыкание. Замыкание принимает один параметр name и выводит приветствие. Вызов greet(Groovy) выполняет код внутри замыкания. Нет проверяемых исключений — компилятор Groovy игнорирует механизм throws, принятый в Java. Groovy позволяет работать с переменными без явного указания типа (def), что делает его гибким для скриптов. Кавычки, точки, запятые, скобки и прочие знаки препинания. Groovy использует все ключевые слова Java и добавляет собственные для упрощения синтаксиса. Справочник разделён на логические группы для удобства использования.История языка Groovy
Что требуется знать перед началом изучения языка программирования Groovy
Рекомендации по разработке на Groovy
Основы языка Groovy
Типы данных и объявление переменных
Операторы и выражения в Groovy
Циклы и управляющие конструкции
Объектно-ориентированное программирование в Groovy
Иерархия исключений в Groovy
Особенности и расширения языка Groovy
Синтаксис и пунктуация в Groovy
Ключевые слова языка Groovy